package com.example.ranking.config;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * RabbitMQ配置：宠物状态变更消息的队列、交换机
 */
@Configuration
public class MqExchangeQueueConfig {

    // 交换机名称
    public static final String PET_STATUS_EXCHANGE = "pet_status_exchange";
    // 队列名称
    public static final String PET_STATUS_QUEUE = "pet_status_queue";
    // 路由键
    public static final String PET_STATUS_ROUTING_KEY = "pet.status.change";

    /**
     * 交换机（Direct类型，精准路由）
     */
    @Bean
    public DirectExchange petStatusExchange() {
        // durable=true：交换机持久化；autoDelete=false：不自动删除
        return new DirectExchange(PET_STATUS_EXCHANGE, true, false);
    }

    /**
     * 队列（持久化，避免消息丢失）
     */
    @Bean
    public Queue petStatusQueue() {
        // durable=true：队列持久化；exclusive=false：非排他；autoDelete=false：不自动删除
        return QueueBuilder.durable(PET_STATUS_QUEUE).build();
    }

    /**
     * 绑定交换机和队列
     */
    @Bean
    public Binding petStatusBinding(DirectExchange petStatusExchange, Queue petStatusQueue) {
        return BindingBuilder.bind(petStatusQueue).to(petStatusExchange).with(PET_STATUS_ROUTING_KEY);
    }

    // Getter方法（供Canal客户端和MQ消费者使用）
    public String getPetStatusExchange() {
        return PET_STATUS_EXCHANGE;
    }

    public String getPetStatusQueue() {
        return PET_STATUS_QUEUE;
    }

    public String getPetStatusRoutingKey() {
        return PET_STATUS_ROUTING_KEY;
    }
}
